package net.lucene.chapter5.analyzer;

import org.apache.lucene.analysis.*;
import org.apache.lucene.util.Version;

import java.io.Reader;
import java.util.Set;

/**
 * 自定义的停用词分词器
 *
 * @author Barudisshu
 */
public final class MyStopAnalyzer extends Analyzer {

    // 存放停用分词信息
    private Set<Object> stopWords;

    /**
     * 自定义的用于过滤指定字符串的分词器
     *
     * @param stopWords 用于指定所要过滤的字符串（忽略大小写）
     */
    public MyStopAnalyzer(String[] _stopWords) {

        // 自动将字符串数组转换为Set
        stopWords = StopFilter.makeStopSet(Version.LUCENE_36, _stopWords, true);
        // 将原有停用词加入到现在的停用词中
        stopWords.addAll(StopAnalyzer.ENGLISH_STOP_WORDS_SET);

    }

    @Override
    public TokenStream tokenStream(String fieldName, Reader reader) {
        // 为这个分词设定过滤器链和Tokenizer
        return new StopFilter(Version.LUCENE_36,
                // 这里可以存放很多的TokenFilter
                new LowerCaseFilter(Version.LUCENE_36, new LetterTokenizer(Version.LUCENE_36, reader)),
                stopWords);
    }
}
